<?php 
class Cache
{	
	public $dir;
	
	// 构造函数 创建目录
	function __construct($dir='cache')
	{
		$this->dir = $dir;
		is_dir($this->dir) || mkdir($dir,0755,true);
	}

	// 一、获得缓存文件
	public function getFile($name)
	{	//加密文件
		return $this->dir.'/'.md5($name).'.php';
	}

	// 二、设置缓存文件
	public function set($name,$value,$expire=3600)
	{
		$file = $this->getFile($name);

		if($this->has($name)){
			return true;
		}

		//往前面追加10个0
		$expire = str_pad($expire, 10,'0',STR_PAD_LEFT);
		//验证数据
		$data = "<?php if(!define('HD'))exit;?>".PHP_EOL.
		//序列化
		$expire.PHP_EOL.serialize($value);
		// 写入内容
		return file_put_contents($file, $data);
	}
		
	// 三、检测缓存是否有效
	public function has($name)
	{
		$file = $this->getFile($name);
		// 判断是否是文件
		if(is_file($file)){
			// 把文件中的内容读入到文件中
			$content=file_get_contents($file);
			// 提取字符串
			$time = substr($content,32,10);
			//在缓存器内
			if(fileatime($file)+$time>time()){
				return true;
			}

		}
		return false;
	}
	
	// 四 获取缓存数据 在浏览器中显示出来
	public function get($name)
	{
		if($this->has($name)){
			$file=$this->getFile($name);
			//读取文件
			$data = file_get_contents($file);
			//截取字符串
			$data = substr($data,43);
			// 返回转换后的数值
			return unserialize($data);
		}
	}

	// 五、删除缓存
	public function del($name)
	{
		$file = $this->getFile($name);

		if(is_file($file)){
			return unlink($file);
		}
		return true;
	}

	//六、全部删除
	public function flush()
	{
		//把所有的文件全部遍历出来删除掉
		foreach (glob($this->dir.'/*.*') as $file) {
			if(is_file($file) && @unlink($file)){
				return false;
			}
		}
		return true;
	}


}


 ?>